package cn.virens.app.database;

public interface DatabaseExecutor {
	/**
	 * 执行非事务查询
	 * 
	 * @param  execute
	 * @return
	 * @throws Exception
	 */
	public <B> B execute(DatabaseQueryExecute<B> execute);

	/**
	 * 执行事务查询
	 * 
	 * @param  execute
	 * @return
	 * @throws Exception
	 */
	public <B> B transactionExecute(DatabaseQueryExecute<B> execute);

	/**
	 * 执行更新语句
	 * 
	 * @param  sql
	 * @return
	 */
	default Integer executeUpdate(String sql) {
		return execute((c) -> c.executeUpdate(sql));
	}

	/**
	 * 执行更新语句
	 * 
	 * @param  format SQL模版
	 * @param  args   参数
	 * @return
	 */
	default Integer executeUpdate(String format, Object... args) {
		return executeUpdate(String.format(format, args));
	}
}
